package com.hello;

import java.util.List;
import java.util.ArrayList;

/**
 * 案例一：数字的全排列（没有重复数字）
 * 题目：
 * 给定一个没有重复数字的序列，返回其所有可能的全排列。
 * https://blog.csdn.net/weixin_45594025/article/details/105005464
 */
public class BackTrack {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> list = new ArrayList<>();
        backTrack(list, new ArrayList<Integer>(), nums);
        return list;
    }

    public void backTrack(List<List<Integer>> list, List<Integer> tempList, int[] nums){
        if(tempList.size() == nums.length){
            list.add(new ArrayList<>(tempList));
        }else{
            for(int i = 0; i < nums.length; i++){
                // 已经使用过的数字就不能再用了，continue跳出本次循环，进行下一次循环
                if(tempList.contains(nums[i]))
                    continue;
                tempList.add(nums[i]);
                backTrack(list, tempList, nums);
                // 回溯
                tempList.remove(tempList.size() - 1);
            }
        }
    }
}
